﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SiteAgle.Models;
using SiteAgle.ViewHelper;

namespace SiteAgle.Controllers
{
    /// <summary>
    /// 
    /// </summary>
    public class GrupoTrabalhoController : GeneralController
    {
        DaoGrupoTrabalho dao;
        /// <summary>
        /// Initializes a new instance of the <see cref="GrupoTrabalhoController"/> class.
        /// </summary>
        public GrupoTrabalhoController()
        {
            dao = new DaoGrupoTrabalho();
        }
        //
        // GET: /GrupoTrabalho/

        /// <summary>
        /// Indexes this instance.
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            return View(dao.listar());
        }

        //
        // GET: /GrupoTrabalho/Details/5

        /// <summary>
        /// Detailses the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public ActionResult Detalhe(int id)
        {
            return View( dao.ObterPorID(id));
          //  return View();
        }

        /// <summary>
        /// Grupoes the detalhe.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="iduser">The iduser.</param>
        /// <returns></returns>
        public ActionResult GrupoDetalhe(int id, int iduser)
        {
            GrupoViewHelper grupoview =new GrupoViewHelper();
            GrupoTrabalho grupo = dao.ObterPorID(id);
            DaoUsuario daouser = new DaoUsuario();
            Usuario user = daouser.ObterPorID(iduser);
            grupoview.User = user;
            grupoview.Projetos = new List<ProjetoGrupoViewHelper>();
            grupoview.Grupo = grupo;
            foreach (Projeto projeto in grupo.Projetos)
            {
                ProjetoGrupoViewHelper pview = new ProjetoGrupoViewHelper();
                pview.Projeto = projeto;
                pview.NaoIniciado = dao.GetNaoIniciadoForUser(projeto.Id,user.Id);
                pview.Iniciado = dao.GetIniciadoForUser(projeto.Id, user.Id);
                pview.Impedido = dao.GetImpedidoForUser(projeto.Id, user.Id);
                pview.Concluido = dao.GetConcluidoForUser(projeto.Id, user.Id);
                grupoview.Projetos.Add(pview);
            }

            return View(grupoview);
            //  return View();
        }


        public ActionResult Print(int id, int iduser)
        {
            GrupoViewHelper grupoview = new GrupoViewHelper();
            GrupoTrabalho grupo = dao.ObterPorID(id);
            DaoUsuario daouser = new DaoUsuario();
            Usuario user = daouser.ObterPorID(iduser);
            grupoview.User = user;
            grupoview.Projetos = new List<ProjetoGrupoViewHelper>();
            grupoview.Grupo = grupo;
            foreach (Projeto projeto in grupo.Projetos)
            {
                ProjetoGrupoViewHelper pview = new ProjetoGrupoViewHelper();
                pview.Projeto = projeto;
                pview.NaoIniciado = dao.GetNaoIniciadoForUser(projeto.Id, user.Id);
                pview.Iniciado = dao.GetIniciadoForUser(projeto.Id, user.Id);
                pview.Impedido = dao.GetImpedidoForUser(projeto.Id, user.Id);
                pview.Concluido = dao.GetConcluidoForUser(projeto.Id, user.Id);
                grupoview.Projetos.Add(pview);
            }

            return View(grupoview);
            //  return View();
        }

        //
        // GET: /GrupoTrabalho/Create

        /// <summary>
        /// Creates this instance.
        /// </summary>
        /// <returns></returns>
        public ActionResult Novo()
        {
            return View(new GrupoTrabalho());
        } 

        //
        // POST: /GrupoTrabalho/Create

        /// <summary>
        /// Creates the specified grupo trabalho.
        /// </summary>
        /// <param name="grupoTrabalho">The grupo trabalho.</param>
        /// <param name="collection">The collection.</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Novo(GrupoTrabalho grupoTrabalho, FormCollection collection, int[] ckd)
        {
            //try
            //{
                
              grupoTrabalho.Criacao = DateTime.Now;
              //adicionando ao grupo
              foreach (int id in ckd)
              {
                  grupoTrabalho.Usuarios.Add(new DaoUsuario().ObterPorID(id));

              }
              grupoTrabalho = dao.Salvar(grupoTrabalho);
              Session["sucesso"] = "Criado com sucesso";
              //grupoTrabalho = dao.Salvar(grupoTrabalho);
              return RedirectToAction("Index");
            //}
            //catch
            //{
            //    return View();
            //}
        }
        
        //
        // GET: /GrupoTrabalho/Edit/5

        /// <summary>
        /// Edits the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public ActionResult Editar(int id)
        {
            return View(dao.ObterPorID(id));
        }

        //
        // POST: /GrupoTrabalho/Edit/5

        /// <summary>
        /// Edits the specified grupo trabalho.
        /// </summary>
        /// <param name="grupoTrabalho">The grupo trabalho.</param>
        /// <param name="id">The id.</param>
        /// <param name="collection">The collection.</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Editar(GrupoTrabalho _grupoTrabalho, FormCollection collection, int[] ckd)
        {
            try
            {
                GrupoTrabalho grupoTrabalho = new DaoGrupoTrabalho().ObterPorID(_grupoTrabalho.Id);
                grupoTrabalho.Descricao = _grupoTrabalho.Descricao;
                grupoTrabalho.Usuarios.Clear();

                dao.Salvar(grupoTrabalho);
                //adicionando ao grupo
                foreach (int id in ckd)
                {
                    grupoTrabalho.Usuarios.Add(new DaoUsuario().ObterPorID(id));

                }
                // TODO: Add update logic here
                dao.Salvar(grupoTrabalho);
                Session["sucesso"] = "Salvo com sucesso";
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /GrupoTrabalho/Delete/5

        /// <summary>
        /// Deletes the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        public ActionResult Delete(int id)
        {
            return View(dao.ObterPorID(id));
        }

        //
        // POST: /GrupoTrabalho/Delete/5

        /// <summary>
        /// Deletes the specified id.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <param name="collection">The collection.</param>
        /// <returns></returns>
       
        public ActionResult Excluir(int id)
        {
           
           
                DaoGrupoTrabalho dao = new DaoGrupoTrabalho();
                GrupoTrabalho antUsuario = dao.ObterPorID(id);
                if (antUsuario.Projetos.Count() == 0)
                {
                    dao.Excluir(antUsuario);
                    Session["sucesso"] = "Grupo Excluido com sucesso";
                }
                else
                {
                    Session["Error"] = "Não é possível Excluir esse Grupo, pois ele possui dependências!";
                }
                return RedirectToAction("Index");
                // TODO: Add delete logic here
             
           
        }
    }
}
